
// cc.Class({
//     extends: cc.Component,
//     properties: {},

//     onLoad: function() {
//         window.CCGlobal = this,
//         Date.prototype.format = this.dateFormat,
//         this.myShips = void 0,
//         this.mySellingShips = void 0,
//         this.auctionList = void 0,
//         this.auction = {},
//         this.shipStatus = {},
//         this.shipStruct = {},
//         this.shipName = {},
//         this.nspBalance = 0,
//         this.contracts = void 0,
//         this.mapping = void 0,
//         this.net = "mainnet",
//         this.api = "http://www.etherwarship.com/api/client/",
//         this.appearance = {
//             path: "http://file.etherwarship.com/appearance/",
//             fullNormal: "full_normal",
//             halfNormal: "half_normal",
//             headNormal: "head_normal",
//             brokenMin: "full_broken_min",
//             brokenMax: "full_broken_max",
//             dead: "dead",
//             suffix: "png",
//             getPath: function(t, e) {
//                 return this.path + t + "/" + e + "." + this.suffix
//             }
//         },
//         this.lastScene = null,
//         this.nickname = "",
//         "undefined" != typeof web3 ? (this.web3 = new Web3(web3.currentProvider),
//         this.nspPrice = this.web3.toBigNumber(this.web3.toWei("0.001", "ether")),
//         this.web3.currentProvider.isMetaMask ? 1 != this.web3.version.network ? this.showMetaMask("wrong_network") : (this.hasMetaMask = !0,
//         this.account = this.web3.eth.accounts[0]) : this.showMetaMask("no_metamask")) : this.showMetaMask("no_metamask")
//     },
//     start: function() {
//         var t = this;
//         if (this.hasMetaMask) {
//             void 0 === this.account ? this.showMetaMask("no_address") : this.postData("getNickname", {}, this.setNickname);
//             setInterval(function() {
//                 CCGlobal.web3.eth.accounts[0] !== CCGlobal.account && (CCGlobal.account = CCGlobal.web3.eth.accounts[0],
//                 t.myShips = void 0,
//                 (t.mySellingShips = void 0) === CCGlobal.account ? CCGlobal.showMetaMask("no_address") : (CCGlobal.postData("getNickname", {}, CCGlobal.setNickname),
//                 void 0 !== CCGlobal.contracts && CCGlobal.contracts.NSPToken.balanceOf(CCGlobal.account, function(t, e) {
//                     t || (CCGlobal.nspBalance = e.toNumber())
//                 }),
//                 cc.director.loadScene(cc.director.getScene().name)))
//             }, 100)
//         }
//     },
//     startEvent: function() {
//         void 0 !== CCGlobal.account && CCGlobal.contracts.NSPToken.balanceOf(CCGlobal.account, function(t, e) {
//             t || (CCGlobal.nspBalance = e.toNumber())
//         }),
//         this.nspInterval = setInterval(function() {
//             void 0 !== CCGlobal.account && CCGlobal.contracts.NSPToken.balanceOf(CCGlobal.account, function(t, e) {
//                 t || (CCGlobal.nspBalance = e.toNumber())
//             })
//         }, 1e4),
//         this.warshipEvent = CCGlobal.contracts.Warship.allEvents().watch(function(t, n) {
//             if (t)
//                 console.log(e);
//             else
//                 switch (n.event) {
//                 case "NewShip":
//                     CCGlobal.shipStruct[n.args.shipId.toNumber()] = CCGlobal.decodeWsic(n.args.wsic),
//                     n.args.owner.toLowerCase(),
//                     CCGlobal.account.toLowerCase();
//                     break;
//                 case "ShipStatusUpdate":
//                     CCGlobal.shipStatus[n.args.shipId.toNumber()] = n.args.newStatus.toNumber();
//                     break;
//                 case "ShipStructUpdate":
//                     var i = n.args.shipId.toNumber();
//                     CCGlobal.shipStruct[i] = CCGlobal.decodeWsic(n.args.wsic),
//                     CCGlobal.myShips.indexOf(i);
//                     break;
//                 case "Transfer":
//                     if (n.args.from == CCGlobal.account) {
//                         if (void 0 !== CCGlobal.myShips)
//                             -1 != (a = CCGlobal.myShips.indexOf(n.args.shipId.toNumber())) && CCGlobal.myShips.splice(a, 1)
//                     } else if (n.args.to == CCGlobal.account) {
//                         var a;
//                         if (void 0 !== CCGlobal.myShips)
//                             -1 == (a = CCGlobal.myShips.indexOf(n.args.shipId.toNumber())) && CCGlobal.myShips.push(n.args.shipId.toNumber())
//                     }
//                 }
//         }),
//         this.auctionEvent = CCGlobal.contracts.Auction.allEvents().watch(function(t, n) {
//             if (t)
//                 console.log(e);
//             else
//                 switch (n.event) {
//                 case "AuctionWon":
//                     if (CCGlobal.shipStatus[n.args.shipId.toNumber()] = 1,
//                     void 0 !== CCGlobal.auctionList)
//                         -1 != (i = CCGlobal.auctionList.indexOf(n.args.shipId.toNumber())) && CCGlobal.auctionList.splice(i, 1);
//                     if (n.args.winner.toLowerCase() == CCGlobal.account.toLowerCase())
//                         ;
//                     else if (n.args.seller.toLowerCase() == CCGlobal.account.toLowerCase()) {
//                         if (void 0 !== CCGlobal.mySellingShips)
//                             -1 != (i = CCGlobal.mySellingShips.indexOf(n.args.shipId.toNumber())) && CCGlobal.mySellingShips.splice(i, 1)
//                     }
//                     break;
//                 case "AuctionStarted":
//                     if (CCGlobal.shipStatus[n.args.shipId.toNumber()] = 4,
//                     void 0 !== CCGlobal.auctionList)
//                         -1 == (i = CCGlobal.auctionList.indexOf(n.args.shipId.toNumber())) && CCGlobal.auctionList.push(n.args.shipId.toNumber());
//                     if (n.args.seller.toLowerCase() == CCGlobal.account.toLowerCase())
//                         if (void 0 !== CCGlobal.mySellingShips)
//                             -1 == (i = CCGlobal.mySellingShips.indexOf(n.args.shipId.toNumber())) && CCGlobal.mySellingShips.push(n.args.shipId.toNumber());
//                     break;
//                 case "AuctionFinalized":
//                     var i;
//                     if (CCGlobal.shipStatus[n.args.shipId.toNumber()] = 1,
//                     void 0 !== CCGlobal.auctionList)
//                         -1 != (i = CCGlobal.auctionList.indexOf(n.args.shipId.toNumber())) && CCGlobal.auctionList.splice(i, 1);
//                     if (n.args.seller.toLowerCase() == CCGlobal.account.toLowerCase())
//                         if (void 0 !== CCGlobal.mySellingShips)
//                             -1 != (i = CCGlobal.mySellingShips.indexOf(n.args.shipId.toNumber())) && CCGlobal.mySellingShips.splice(i, 1)
//                 }
//         }),
//         this.battleEvent = CCGlobal.contracts.Battle.allEvents().watch(function(t, n) {
//             if (t)
//                 console.log(e);
//             else
//                 switch (n.event) {
//                 case "Battle":
//                     -1 != CCGlobal.myShips.indexOf(n.args.attacker.toNumber()) ? (n.args.attacker,
//                     n.args.defender,
//                     n.args.atkwin) : -1 != CCGlobal.myShips.indexOf(n.args.defender.toNumber()) && (n.args.defender,
//                     n.args.attacker,
//                     !n.args.atkwin)
//                 }
//         }),
//         this.trainingEvent = CCGlobal.contracts.Training.allEvents().watch(function(t, n) {
//             if (t)
//                 console.log(e);
//             else
//                 switch (n.event) {
//                 case "BattleBr":
//                     CCGlobal.myShips.indexOf(n.args.shipId.toNumber())
//                 }
//         }),
//         this.nspTokenEvent = CCGlobal.contracts.NSPToken.allEvents().watch(function(t, n) {
//             if (t)
//                 console.log(e);
//             else
//                 switch (n.event) {
//                 case "Transfer":
//                     n.args.from.toLowerCase() == CCGlobal.account.toLowerCase() || (n.args.to.toLowerCase(),
//                     CCGlobal.account.toLowerCase())
//                 }
//         })
//     },
//     showPage: function(i, a, o, s) {
//         cc.loader.loadRes("Prefab/Layer", function(t, e) {
//             var n = cc.instantiate(e);
//             n.getComponent("Layer").init(i, a, o, s),
//             cc.find("Canvas").addChild(n)
//         })
//     },
//     showMetaMask: function(t) {
//         CCGlobal.showPage("请检查MetaMask", "Img", "Texture/metamask/" + t, !1)
//     },
//     alert: function(i) {
//         cc.loader.loadRes("Prefab/Alert", function(t, e) {
//             var n = cc.instantiate(e);
//             n.getComponent("Alert").msg = i,
//             cc.find("Canvas").addChild(n),
//             setTimeout(function() {
//                 n.destroy()
//             }, 2e3)
//         })
//     },
//     setNickname: function(t, e) {
//         if (e.ok) {
//             var n = e.data;
//             n.register ? (CCGlobal.nickname = n.nickname,
//             cc.find("Canvas").getComponent("Common").nickname = CCGlobal.nickname) : CCGlobal.showPage("欢迎来到以太战舰", "Prefab", "Prefab/page/SetNickname", !1)
//         }
//     },
//     setContracts: function(t) {
//         for (var e = {}, n = {}, i = 0; i < t.length; i++)
//             e[t[i].name] = CCGlobal.web3.eth.contract(t[i].abi).at(t[i].address),
//             e[t[i].name].blockNumber = t[i].block_number,
//             n[t[i].address.toLowerCase()] = t[i].name;
//         CCGlobal.contracts = e,
//         CCGlobal.mapping = n,
//         this.startEvent(),
//         cc.find("Canvas").emit("contractsInit")
//     },
//     postData: function(t, e, n) {
//         var i = new XMLHttpRequest
//             , a = this;
//         i.onload = function() {
//             200 <= i.status && i.status < 400 ? n.call(a, null, i.response) : CCGlobal.alert("错误:" + i.statusText)
//         }
//         ,
//         i.onabort = function() {
//             CCGlobal.alert("连接取消")
//         }
//         ,
//         i.onerror = function() {
//             CCGlobal.alert("网络连接错误")
//         }
//         ,
//         i.ontimeout = function() {
//             CCGlobal.alert("连接超时")
//         }
//         ,
//         i.timeout = 3e4,
//         i.responseType = "json",
//         i.open("POST", CCGlobal.api + t, !0),
//         i.setRequestHeader("Content-type", "application/json"),
//         void 0 !== CCGlobal.account && i.setRequestHeader("Token", CCGlobal.account);
//         try {
//             i.send(JSON.stringify(e))
//         } catch (t) {
//             CCGlobal.alert("网络发送失败")
//         }
//     },
//     dateFormat: function(t) {
//         var e = {
//             "M+": this.getMonth() + 1,
//             "d+": this.getDate(),
//             "h+": this.getHours(),
//             "m+": this.getMinutes(),
//             "s+": this.getSeconds(),
//             "q+": Math.floor((this.getMonth() + 3) / 3),
//             S: this.getMilliseconds()
//         };
//         for (var n in /(y+)/.test(t) && (t = t.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))),
//         e)
//             new RegExp("(" + n + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[n] : ("00" + e[n]).substr(("" + e[n]).length)));
//         return t
//     },
//     getShipName: function(n, i) {
//         i = i || function() {}
//         ,
//         void 0 !== CCGlobal.shipName[n] ? i.call(this, null, CCGlobal.shipName[n]) : CCGlobal.postData("getShipName", {
//             profile: n
//         }, function(t, e) {
//             e.ok ? (CCGlobal.shipName[n] = e.data,
//             i.call(this, null, CCGlobal.shipName[n])) : i.call(this, e)
//         })
//     },
//     getShipStatus: function(n, i) {
//         i = i || function() {}
//         ,
//         void 0 !== CCGlobal.shipStatus[n] ? i.call(this, null, CCGlobal.shipStatus[n]) : CCGlobal.contracts.Warship.GetStatus(n, function(t, e) {
//             t ? i.call(this, t) : (CCGlobal.shipStatus[n] = e.toNumber(),
//             i.call(this, null, CCGlobal.shipStatus[n]))
//         })
//     },
//     getShipStruct: function(n, i) {
//         i = i || function() {}
//         ,
//         void 0 !== CCGlobal.shipStruct[n] ? i.call(this, null, CCGlobal.shipStruct[n]) : CCGlobal.contracts.Warship.Getwsic(n, function(t, e) {
//             t ? i.call(this, t) : (CCGlobal.shipStruct[n] = CCGlobal.decodeWsic(e),
//             i.call(this, null, CCGlobal.shipStruct[n]))
//         })
//     },
//     getAuction: function(n, i) {
//         i = i || function() {}
//         ,
//         CCGlobal.auction[n] ? i.call(this, null, CCGlobal.auction[n]) : CCGlobal.contracts.Auction.auctions(n, function(t, e) {
//             t ? i.call(this, t) : (CCGlobal.auction[n] = {
//                 seller: e[0],
//                 price: e[2].toNumber(),
//                 time: 1e3 * e[3].toNumber()
//             },
//             i.call(this, null, CCGlobal.auction[n]))
//         })
//     },
//     getMySellingShips: function(a) {
//         a = a || function() {}
//         ,
//         void 0 !== CCGlobal.mySellingShips ? a.call(this, null, CCGlobal.mySellingShips) : CCGlobal.contracts.Auction.shipsBySeller(CCGlobal.account, function(t, e) {
//             if (t)
//                 a.call(this, t);
//             else {
//                 for (var n = [], i = 0; i < e.length; i++)
//                     n.push(e[i].toNumber());
//                 CCGlobal.mySellingShips = n,
//                 a.call(this, null, CCGlobal.mySellingShips)
//             }
//         })
//     },
//     getAuctionList: function(o) {
//         o = o || function() {}
//         ,
//         void 0 !== CCGlobal.auctionList ? o.call(this, null, CCGlobal.auctionList) : CCGlobal.contracts.Warship.GetShipsByOwner(CCGlobal.contracts.Auction.address, function(t, e) {
//             if (t)
//                 o.call(this, t);
//             else {
//                 for (var n = [], i = 0; i < e.length; i++) {
//                     var a = e[i].toNumber();
//                     n.push(a)
//                 }
//                 CCGlobal.auctionList = n,
//                 o.call(this, null, CCGlobal.auctionList)
//             }
//         })
//     },
//     getMyShips: function(o) {
//         o = o || function() {}
//         ,
//         void 0 !== CCGlobal.myShips ? o.call(this, null, CCGlobal.myShips) : CCGlobal.contracts.Warship.GetShipsByOwner(CCGlobal.account, function(t, e) {
//             if (t)
//                 o.call(this, t);
//             else {
//                 for (var n = [], i = 0; i < e.length; i++) {
//                     var a = e[i].toNumber();
//                     n.push(a),
//                     CCGlobal.getShipStatus(a)
//                 }
//                 CCGlobal.myShips = n,
//                 o.call(this, null, CCGlobal.myShips)
//             }
//         })
//     },
//     decodeWsic: function(t) {
//         var e = {};
//         return e.extend = t.mod(65536).toNumber(),
//         t = t.div(65536).floor(),
//         e.specials = t.mod(65536).toNumber(),
//         t = t.div(65536).floor(),
//         e.status = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.level = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.shipType = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.duration = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.speed = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.hitrate = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.armor = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.firepower = t.mod(256).toNumber(),
//         t = t.div(256).floor(),
//         e.profile = CCGlobal.web3.toHex(t.mod(4294967296)).slice(2),
//         e.profile.length < 8 && (e.profile = new Array(8 - e.profile.length + 1).join(0) + e.profile),
//         t = t.div(4294967296).floor(),
//         e.appearance = CCGlobal.web3.toHex(t).slice(2),
//         e.appearance.length < 32 && (e.appearance = new Array(32 - e.appearance.length + 1).join(0) + e.appearance),
//         e
//     },
//     getShipTypeInfo: function(t) {
//         var e = {
//             type: t
//         };
//         switch (parseInt(t)) {
//         case 0:
//             e.name = "护卫舰",
//             e.info = "护卫舰是以导弹、舰炮、深水炸弹及反潜鱼雷为主要武器的轻型水面战斗舰艇，它的主要任务是为舰艇编队担负反潜、护航、巡逻、警戒、侦察及登陆支援作战任务。";
//             break;
//         case 1:
//             e.name = "驱逐舰",
//             e.info = "驱逐舰是一种多用途的军舰，海军重要的舰种之一，装备有防空、反潜、舰炮、鱼雷等多种武器，担任进攻突击、编队防空、反潜护卫、巡逻警戒、海上封锁任务。";
//             break;
//         case 2:
//             e.name = "轻型巡洋舰",
//             e.info = "轻巡洋舰在排水量、装甲和火力等方面优于驱逐舰但弱于重巡洋舰。装有比驱逐舰略强的主炮，作为驱逐舰队领舰，承担反水面小型舰与殖民地巡逻任务等。";
//             break;
//         case 3:
//             e.name = "重型巡洋舰",
//             e.info = "重巡洋舰是强化了火炮口径和装甲防护能力的一类巡洋舰，它的火力能击败战列舰外的所有舰种而面对战列舰时又有足够速度逃跑。";
//             break;
//         case 4:
//             e.name = "战列巡洋舰",
//             e.info = "战列巡洋舰在尺寸和武装与战列舰相近，设计理念是以自身高航速的优势去追捕速度较慢的巡洋舰，并透过战列舰级别的火力摧毁，而装甲厚重、航速较慢的战列舰则加以回避。";
//             break;
//         case 5:
//             e.name = "战列舰",
//             e.info = "战列舰是装有厚重装甲和大口径主炮的大型军舰，是人类创造的最庞大和复杂的武器系统之一，大舰巨炮主义时代的极致产物，是海军力量的标志。";
//             break;
//         case 6:
//             e.name = "护航航母",
//             e.info = "护航航空母舰作为小型航空母舰，通常用于执行保护运输船队免受敌方水面舰艇及水下潜艇攻击的护航任务，航速慢、飞机装载量少，大部分由民用船舰改造而来。";
//             break;
//         case 7:
//             e.name = "轻型航母",
//             e.info = "轻型航空母舰是比标准航空母舰较小的航母，携带具有作战能力的飞机，具有足够的航速，能与海军舰队一同行动进行作战任务。";
//             break;
//         case 8:
//             e.name = "正规航母",
//             e.info = "战斗航空母舰以搭载舰载机为主要武器，提供海量的空中支援和恐怖的远程打击能力，是海军中最大的武器系统平台，名副其实的海上堡垒。";
//             break;
//         case 9:
//             e.name = "传奇鬼船",
//             e.info = "鬼船是以太战舰中最为强大的舰船，极为罕见，一旦出现就能以绝对的火力优势和恐怖的打击能力摧毁一切阻挡道路的战舰。";
//             break;
//         default:
//             e.name = "未知船只",
//             e.info = "",
//             e.type = void 0
//         }
//         return e
//     },
//     mergeLogs: function(t, n) {
//         var e = []
//             , i = "blockNumber";
//         n = null == n ? 1 : n ? 1 : -1;
//         for (var a = 0; a < t.length; a++)
//             e = e.concat(t[a]);
//         return e.sort(function(t, e) {
//             return (t = t[i]) < (e = e[i]) ? -1 * n : e < t ? 1 * n : 0
//         })
//     }
// })